"""
类是一种静态的体现，可以根据类进行实例化出对象
    类的关键字 ：class
     class 类名(object):
        object是所有类的父类，可写可不写
"""
class Student(object):
    # __init__ 是一个特殊的方法，用于创建对象时进行初始化操作的，和Java的构造器是一个作用
    # Python中定义属性是直接在初始化函数的参数列表中进行定义的,然后根据self.属性名=参数名 进行赋值,创建两个属性 name 和 age
    # 在Python中，定义属性的时候默认是public  私有化的属性是用__      受保护的_  一般不会，也有人称之为 暗示为私有属性
    def __init__(self,name,age): # self是对当前类的一个引用，和Java的this用法一样
        self.__name = name # self.name  === Java 中 this.name
        self.age = age
    # 获得私有属性的值 函数名和 属性名保持一致 在该上加上@property
    @property      # 等同于Java中的getter
    def name(self):
        return self.__name
    #修改私有属性 函数名和 属性名保持一致 在该上加上@属性名.setter
    @name.setter
    def name(self,name):
        self.__name = name

    #定义一个学习的方法
    # 在类中定义函数，self是必须在参数列表当中的
    def study(self,courseName):
        print("%s正在学习%s" % (self.__name,courseName))

    #定义一个看电影的方法
    # 当年龄小于18岁的时候，只能 《熊出没》，当大于等于18岁的时候，可以看《Python100天基础大全》
    def watchMovie(self):
        if self.age < 18:
            print("%s只能看《熊出没》" % self.__name)
        else:
            print('%s正在看Python100天基础大全' % self.__name)

if __name__ == '__main__':

    # 将 Student类进行实例化 格式 变量名 = 类名(参数列表)
    stu1 = Student('小明',25)
    #调用这个对象的方法  变量名.函数名(参数)
    #当私有化的属性拥有了对应的getter和setter方法后，可以像调用公开属性的写法去获取和修改
    stu1.name = '小张'
    stu1.age = 4
    print(stu1.name)
    stu1.study('Python程序设计')
    stu1.watchMovie()

    # stu2 = Student('小红',5)
    # stu2.study('十万个为什么')
    # stu2.watchMovie()